package com.atguigu.bigdata.scala.chapter10

object Scala04_Transform_1 {

    def main(args: Array[String]): Unit = {

        // TODO - 隐式转换
        // 函数柯里化
        // 函数作为参数使用
        def test(x:Int, y:Int)( implicit f : (Int, Int) => Int ) = {
            f(x, y)
        }

        implicit def sum = (x:Int, y:Int) => {x - y}

        //println(test(10, 20)(_ + _))
        //println(test(10, 20)(_ - _))
        println(test(10, 20))

        //test(10, 20)

        //val list = List(1,4,3,2)
        //val newlist = list.sortBy(num=>num)
        //val newlist1 = list.sortBy(num=>num)(Ordering.Int.reverse)
       // println(newlist)

        val user1 = new User();
        user1.age = 30
        user1.salary = 2000

        val user2 = new User()
        user2.age = 30
        user2.salary = 1000

        val user3 = new User()
        user3.age = 20
        user3.salary = 3000

        val list = List(user1, user2, user3)

        //println(list.sortBy(_.age))
        // tuple能进行排序：先比较元组中的第一个元素，如果相同，比较第二个，依次类推
        val list1 = list.sortBy(
            user => {
                (user.age, user.salary)
            }
        )(Ordering.Tuple2[Int, Int]( Ordering.Int, Ordering.Int.reverse ))

        // 如果多个数据参与排序，可以自定义排序规则
        val list2 = list.sortWith(
            (u1, u2) => {
                // 返回结果就是你预期的结果的状态
                // 如果是我们需要的结果，那么返回true，如果不是，返回false即可
                if ( u1.age > u2.age) {
                    true
                } else if ( u1.age == u2.age ) {
                    u1.salary > u2.salary
                } else {
                    false
                }
            }
        )

        println(list2)
    }
    class User {
        var age : Int = _
        var salary : Int = _

        override def toString: String = {
            s"User[${age}, ${salary}]"
        }
    }
}
